import permissionManager from '@/utils/permission.js'

/**
 * 智能导航工具类
 * 只根据底部导航顺序决定动画方向：
 * - 目标在右：slide-in-right
 * - 目标在左：slide-in-left
 * 不做页面栈或相邻判断，统一保持左右动画切换体验。
 */

/**
 * 检查是否有权限访问目标页面
 * @param {string} targetPath 目标页面路径
 * @returns {boolean} 是否有权限
 */
function canAccessPage(targetPath) {
	// 获取用户角色配置
	const roleConfig = permissionManager.getRoleConfig()
	const menuItems = roleConfig.menuItems || []

	// 检查目标页面是否在用户的菜单项中
	const hasAccess = menuItems.some(item => item.path === targetPath)
	return hasAccess
}

// 底部导航栏页面顺序（从左到右）
const NAV_ORDER = [
	'/pages/index/index',           // 工作台
	'/pages/asset/index',           // 资产管理
	'/pages/repair/fault-report',   // 故障报修
	'/pages/repair/index',          // 故障维修
	'/pages/more/index'             // 更多功能
];

/**
 * 获取页面在导航栏中的索引位置
 * @param {string} pagePath 页面路径
 * @returns {number} 索引位置，-1表示不在导航栏中
 */
function getPageIndex(pagePath) {
	return NAV_ORDER.indexOf(pagePath);
}

/**
 * 智能导航到指定页面
 * @param {string} targetPath 目标页面路径
 * @param {string} currentPath 当前页面路径（可选，会自动获取）
 */
function smartNavigate(targetPath, currentPath = null) {
	// 权限检查：如果没有权限访问目标页面，显示提示并阻止跳转
	if (!canAccessPage(targetPath)) {
		uni.showToast({
			title: '没有权限访问',
			icon: 'none',
			duration: 2000
		});
		console.log(`用户试图访问无权限页面: ${targetPath}`);
		return;
	}

	// 如果没有提供当前页面路径，尝试从页面栈获取
	if (!currentPath) {
		const pages = getCurrentPages();
		if (pages.length > 0) {
			currentPath = '/' + pages[pages.length - 1].route;
		}
	}

    const currentIndex = getPageIndex(currentPath);
    const targetIndex = getPageIndex(targetPath);

	// 如果目标页面不在导航栏中，使用默认的navigateTo
	if (targetIndex === -1) {
		uni.navigateTo({
			url: targetPath
		});
		return;
	}

	// 如果当前页面不在导航栏中，使用reLaunch直接跳转到目标页面
	if (currentIndex === -1) {
		uni.reLaunch({
			url: targetPath
		});
		return;
	}

    // 同页：不操作
    if (targetIndex === currentIndex) return;

    // 对于底部导航栏页面，使用 reLaunch 避免页面栈累积
	// 这样可以保持流畅的切换效果，不会有返回键出现
	uni.reLaunch({
		url: targetPath
	});
}

/**
 * 导航到工作台
 */
function goToWorkbench() {
	smartNavigate('/pages/index/index');
}

/**
 * 导航到资产管理
 */
function goToAssetManagement() {
	smartNavigate('/pages/asset/index');
}

/**
 * 导航到故障报修
 */
function goToFaultReport() {
	smartNavigate('/pages/repair/fault-report');
}

/**
 * 导航到故障维修
 */
function goToRepairs() {
	smartNavigate('/pages/repair/index');
}

/**
 * 导航到更多功能
 */
function goToMore() {
	smartNavigate('/pages/more/index');
}

export default {
	smartNavigate,
	goToWorkbench,
	goToAssetManagement,
	goToFaultReport,
	goToRepairs,
	goToMore,
	getPageIndex,
	NAV_ORDER,
	canAccessPage
};
